<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
    <script type="text/javascript">
        function SuperClass(id){
            this.book=['1','2','3']
            this.id=id
        }
        SuperClass.prototype.showbook=function(){
            console.log(this.book)
        }
        function SubClass(id,time){
            SuperClass.call(this,id)//只能继承属性 不能继承父类上的方法
            this.time=time
        }
        
        // SubClass.prototype=new SuperClass()
        SubClass.prototype=new SuperClass()
        console.log(SubClass.prototype)
        //函数对象的prototype是函数对象的一个属性 这个属性有一个默认属性 指向该函数对象 修改函数对象的prototype 
        //重新指向SuperClass实例 所以实例的constructor指向该函数对象的prototype的constructor 就是SuperClass的构造函数
        SubClass.prototype.constructor=SubClass
        var instance=new SubClass(1,3)
        var instance2=new SubClass(2,4)
        // SubClass.prototype.getTime=function(){
        //     console.log(this.time)
        // }
        // console.log(instance.supervalue)
        // console.log(instance instanceof SubClass)
        // console.log(instance instanceof SuperClass)
        // console.log(instance)
        // console.log(SubClass.prototype instanceof SuperClass)//instanceof 检测前面对象是否是后面对象的实例
        // console.log(SubClass.prototype instanceof Object)
        // instance.book.push('4')
        // console.log(instance2.book)
        // instance.showbook()
        console.log(instance.book,instance.id)
        instance.book.push('4')
        instance.showbook()
        instance2.showbook()
        console.log(instance)
        console.log(SubClass.prototype.constructor==new SuperClass().constructor)
        console.log(SuperClass.prototype.__proto__==Object.prototype)
        console.log(Function.prototype==Object.__proto__)
        // 每个函数对象都有个prototype属性 同是也是一个对象 保存着对象实例所共有的属性和方法。 该属性有个向该函数默认属性constructor指对象的构造函数
        // 每个对象都有个__proto__属性 指向创建这个对象的构造函数的原型对象
        // function Fn(){} var p=new Fn() 首先创建了一个空对象p{} 是object类型的 将p的__proto__指向 Fn.prototype对象 然后讲Fn函数对象指针this指向p 指向Fn
        // 
        // 
        // 
        // 
        // console.log(instance.time)
        // 
        // 
        function Person(name){
        this.name = name;
    }
    
    var personOne=new Person("xl");
    
    Person.prototype = {
        sayName: function(){
            console.log(this.name);
        }
    };
    
    var personTwo = new Person('XL');
    
    // console.log(personOne.constructor); //输出true
    // console.log(personTwo.constructor); //输出f
    </script>
    </body>
</html>